ingenious
Anpassung Aufmaßblätter
Updates > Jahresupdate 2025 - 2026 > Anpassung Aufmaßblätter

Mit dem Jahresupdate 2025 - 2026 wurden weitreichende Aktualisierungen an grundlegenden Bestandteilen der Software vorgenommen.

So wurde unter anderem das Spread-Plugin, das für die Erstellung von Aufmaßblättern (Produktionspapiere) verwendet wird, aktualisert.

Mit dem Einspielen der aktuellen Version kann es in wenigen Fällen bei bestehenden Aufmaßblättern zu einem oder mehreren der nachfolgend beschriebenen Probleme kommen.

Für alle möglichen Abweichungen im Vergleich zur Vorversion stehen einfache Lösungen zur Verfügung.

Die meisten Probleme treten durch Namenskonventionen und Formatierungsfehler auf den Dokumenten auf.

 

Vor der Installation des Updates sind zwei Skripte auszuführen.

Das erste Skript kürzt zu lange Namen der Aufmaßblätter und entfernt Sonderzeichen aus dem Namen bzw. wandelt sie in gültige Zeichen um.

Das zweite Skript sichert die bestehenden Aufmaßblätter in ein Verzeichnis.

 

Skript 1 - Namenskorrektur

Das Skript ist für das Modul Allgemein einzufügen und von hier aus auszuführen.

UpdateMeasurementSheets()
Kopiere Code
public static void UpdateMeasurementSheets()
{
    object[][] measurementTable = SQLDirectAccess.Select(String.Format("SELECT {0}, {1} FROM {2}", DB.Measurement_sheet.ID, DB.Measurement_sheet.matchcode, DB.Measurement_sheet));
    for (int i = 0; i < measurementTable.Count(); i++)
    {              
        string sheetname = measurementTable[i][1].ToString();
        if (sheetname.Contains("[") || sheetname.Contains("]") || sheetname.Contains("*") || sheetname.Contains("?") || sheetname.Contains("/") || sheetname.Contains("\\") ||
            sheetname.Length > 31)
        {
            DataRow row = SQLDirectAccess.GetDataRow(DB.Measurement_sheet, DB.Measurement_sheet.ID, (Guid)measurementTable[i][0]);
            var blob = new Blob(DSTools.getFieldValue<byte[]>(DB.Measurement_sheet.measurement_sheet, row));
            sheetname = sheetname.Replace("[", "(").Replace("]", ")").Replace("*", "_").Replace("?", "_").Replace("/", "|").Replace("\\", "|");
            if (sheetname.Length > 31)
            {
                sheetname = sheetname.Substring(0, 31);
            }
            row[DB.Measurement_sheet.matchcode] = sheetname;
            if (blob.Count > 0)
            {
                FarPoint.Win.Spread.FpSpread fpSpread1 = new FarPoint.Win.Spread.FpSpread();
                fpSpread1.AllowCellOverflow = true;
                fpSpread1.Sheets.Clear();
                var sheet = new FarPoint.Win.Spread.SheetView();
                using (var ms = new System.IO.MemoryStream(blob.RetrieveVariable<byte[]>(0)))
                {
                    sheet.Open(ms);
                }
                sheet.SheetName = sheetname;
                fpSpread1.Sheets.Add(sheet);
                row[DB.Measurement_sheet.measurement_sheet] = ingenious.net.Moduls.Items.MeasurementSheets.SheetViewWrapper.SheetToCompressedByteArray(sheet);
                SQLDirectAccess.InsertUpdate(DB.Measurement_sheet.ID, row);
            }
        }
    }
}

  

Skript zur Namenskorrektur

Skript zur Namenskorrektur

 

Skript 2 - Sicherung der bestehenden Aufmaßblätter

Die Aufmaßblätter sollten vor der Installation des Jahresupdates in ein Verzeichnis gesichert werden.

Kommt es nach dem Update zu einzelnen Problemen, kann es helfen, das gesicherte Aufmaßblatt in der neuen Version neu zu öffnen.

  

Das Skript ist für das Modul Allgemein einzufügen und von hier aus auszuführen.

In der dritten Zeile des Skriptes ist der Zielpfad für die Sicherung einzutragen -> Bsp.: string filepath = "C:/Sicherung_Spread/";

Spreadsheet Export Aufmaßblätter
Kopiere Code
public static void SpreadsheetExport()
{
    string filepath = "";
    if(String.IsNullOrWhiteSpace(filepath))
    {
        Helper.Alert(Lang.getString("Kein Zielpfad ausgewählt!"));
        return;
    }    
    int count = 1;
    object[][] measurementTable = SQLDirectAccess.Select(String.Format("SELECT {0}, {1} FROM {2} WHERE {3} IN (SELECT {0} FROM {4}) ORDER by {1}", 
            DB.Measurement_sheet.ID, DB.Measurement_sheet.matchcode, DB.Measurement_sheet, DB.Measurement_sheet.item_ID, DB.Item));
    for (int i = 0; i < measurementTable.Count(); i++)
    {
        DataRow row = SQLDirectAccess.GetDataRow(DB.Measurement_sheet, DB.Measurement_sheet.ID, (Guid)measurementTable[i][0]);
        string matchcode = DSTools.getFieldValue<string>(DB.Measurement_sheet.matchcode, row);
        var blob = new Blob(DSTools.getFieldValue<byte[]>(DB.Measurement_sheet.measurement_sheet, row));
        string logPath = filepath + "error.txt";
        if (blob.Count > 0)
        {
            try
            {
                FarPoint.Win.Spread.FpSpread fpSpread1 = new FarPoint.Win.Spread.FpSpread();
                fpSpread1.AllowCellOverflow = true;
                fpSpread1.Sheets.Clear();
                var sheet = new FarPoint.Win.Spread.SheetView();
                using (var ms = new System.IO.MemoryStream(blob.RetrieveVariable<byte[]>(0)))
                {
                    sheet.Open(ms);
                }
                string sheetname = sheet.SheetName;
                if (String.IsNullOrEmpty(sheetname))
                    sheetname = "Leerer_Sheetname";
                string foldername = filepath + sheetname;
                string filename = foldername + "\\" + sheetname + ".xml";
                string filename2 = foldername + "\\" + sheetname + ".xlsx";
                if (System.IO.Directory.Exists(foldername))
                {
                    foldername = filepath + sheetname + count;
                    filename = foldername + "\\" + sheetname + ".xml";
                    filename2 = foldername + "\\" + sheetname + ".xlsx";
                    count++;
                }
                else
                {
                    count = 1;
                }
                fpSpread1.Sheets.Add(sheet);
                System.IO.Directory.CreateDirectory(foldername);
                fpSpread1.Save(filename, false);
                using (System.IO.FileStream fs = new System.IO.FileStream(filename2, System.IO.FileMode.Create))
                {
                    fpSpread1.SaveExcel(fs);
                }
            }
            catch (Exception ex)
            {
                string logEntry = String.Format(
@"----------------------------------------
Zeit:      {0:yyyy-MM-dd HH:mm:ss}
Matchcode: {1}
Fehler:    {2}
Stacktrace:
{3}
",
                    DateTime.Now,
                    matchcode,
                    ex.Message,
                    ex.StackTrace
                );
                System.IO.File.AppendAllText(logPath, logEntry);
            }
        }
    }
}

 

Skript zum Export der Aufmaßblätter

Skript zum Export der Aufmaßblätter

   

Nach der Installation des Updates sollten die Aufmaßblätter ausreichend getestet werden.

 

Mögliche Fehler 

Sollte in einem Aufmaßblatt ein Problem festgestellt werden, z.B. eine Abweichung im Vergleich zur Vorversion, kann anhand der nachfolgenden Tabelle eine mögliche Lösung gefunden werden.

 

Fehlerbild Lösung
Text in fett umrandeten Zellen werden anders ausgerichtet Cellpadding bottom erhöhen
Nicht zugefügte Zubehörteile werden angezeigt Bedingung in Rechenfeld auf intwert stellen anstatt string, z.B. (IF(X48=0,0,X48) anstatt IF(X48=0,"0",X48)
Verlängerter Zellenübersprung In der Zellenbedingung die Textformatierung ("---") durch eine numerische 0 ersetzen
Der Header besitzt ein überdecktes Feld, welches halb sichtbar ist. Sichtprüfung beim Drucken und gegebenenfalls Zellgröße anpassen
Fehler bei Bedingungen. Wenn in Bedingungen ein textformatierter Zahlenwert erwartet wird und im Zielfeld eine einfache Zahl steht, ist die Prüfung immer "false". Anpassen der Bedingung, indem auf Zahlen und nicht auf Texte geprüft wird oder Textformatierung im Zielfeld auf Text setzen
Text ist im Feld anders ausgerichtet Zeilengröße erhöhen um Text zu zentrieren
Rundungsfehler: Rundung auf ganze Zahl Zellformatierung von Text auf Nummer mit der gewünschten Anzahl an Dezimalstellen umstellen
Ein Bildskript auf dem Aufmaßblatt wird abgeschnitten

Dem Bild auf dem Aufmaßblatt mehr Platz einräumen, z.B. 2 statt nur 1 Spalte.

Neue Zeile wird ignoriert

Celltype auf Rich-Text ändern (nicht über die Sidebar, sondern über Rechtsklick auf die Zelle oder oben im Menü Cell Types. Im neuen Fenster Checkbox Multiline anhaken.
Zeilenumbrüche werden ignoriert, weshalb Text sichtbar ist, der es in der alten Version nicht war Celltype auf Rich-Text ändern (nicht über die Sidebar, sondern über Rechtsklick auf die Zelle oder oben im Menü Cell Types. Im neuen Fenster Checkbox Multiline anhaken.
Unterschiedliche Formatierung und damit Größe des Textes Die Schriftgröße muss als Ganzzahl angegeben werden.
Unterschiedliche Position des Textes Zelle selektieren und Vertical Alignment einheitlich einstellen
Sehr lange Ladezeit eines Aufmaßblattes

Das per Skript gesicherte Aufmaßblatt neu importieren (Aufmaßblatt öffnen -->exportierte Datei auswählen) und speichern.

#Value-Fehler, fehlende Werte, zusätzliche Werte auf dem Aufmaßblatt Problem tritt auf, wenn die IF-Bedingung, auf die sich die Zelle mit dem Fehler bezieht, unter der betroffenen Zelle steht. --> IF-Bedingung über die Zelle setzen
Zusätzliche Werte und die IF-Bedingung werden auf dem Aufmaßblatt angezeigt. Problem tritt auf, wenn die IF-Bedingung, auf die sich die Zelle mit dem Fehler bezieht, unter der betroffenen Zelle steht. --> IF-Bedingung über die Zelle setzen
Absturz des Clients beim Öffnen des Aufmaßblattes

Das per Skript gesicherte Aufmaßblatt neu importieren (Aufmaßblatt öffnen -->exportierte Datei auswählen) und speichern.

Eine Tabelle auf einem Aufmaßblatt wird nicht angezeigt Eine Bedingung mit =IF(Zelle=TRUE,"","<DeleteRow>") muss in =IF(Zelle=1,"","<DeleteRow>") geändert werden.
Bildskripte auf Aufmaßblättern werden angezeigt, obwohl sie ausgeblendet werden sollen. Die Bedingung zur Anzeige eines Bildes muss sich oberhalb des Bildes befinden.
Das Objekt des Typs "FarPoint.Win.Spread.CellType.BarCode.UPC" kann nicht in Typ "FarPoint.Win.Spread.CellType.BarCode.BarCodeType" umgewandelt werden.

Ursache ist eine als "Barcode" definierte Zelle, die in der neuen Version nicht ausgewertet werden kann.
Das per Skript gesicherte Aufmaßblatt neu importieren (Aufmaßblatt öffnen -->exportierte Datei auswählen) und speichern.